package com.xiaozhengkeji.modok.utils;

import com.alibaba.fastjson.JSONArray;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import redis.clients.jedis.Jedis;

import java.util.ArrayList;
import java.util.List;

public class ItemUtils {
    /**
     * Item转Json
     */
    public String itemToJson(ItemStack is) {
        return JSONArray.toJSONString(is);
    }

    /**
     * Json转Item
     */
    public ItemStack jsonToItem(String json) {
        return JSONArray.parseObject(json, ItemStack.class);
    }

    /**
     * Item集合转Json
     */
    public String itemsToJson(List<ItemStack> is) {
        return JSONArray.toJSONString(is);
    }

    /**
     * Json转Item集合
     */
    public List<ItemStack> jsonToItems(String json) {
        return JSONArray.parseArray(json, ItemStack.class);
    }

    /**
     * 存入玩家的items到redis
     */
    public void playerItemToRedis(Player p) {
        List<ItemStack> itemStackList0 = new ArrayList<>();
        List<ItemStack> itemStackList1 = new ArrayList<>();
        //装备栏
        for (ItemStack itemStack : p.getInventory().getArmorContents()) {
            itemStackList0.add(itemStack);
        }
        //物品栏
        for (ItemStack itemStack : p.getInventory().getExtraContents()) {
            itemStackList1.add(itemStack);
        }
        String itemsStringJson0 = itemsToJson(itemStackList0);
        String itemsStringJson1 = itemsToJson(itemStackList1);
        Jedis jedis = JedisUtils.getJedis();
        jedis.select(3);
        MsgUtils.logServer("存入玩家数据-> " + itemsStringJson0);
        MsgUtils.logServer("存入玩家数据-> " + itemsStringJson1);
        jedis.set(p.getName() + "_0", itemsStringJson0);
        jedis.set(p.getName() + "_1", itemsStringJson1);
        JedisUtils.closeJedis(jedis);
    }

    /**
     * 从读redis取玩家的Item0
     */
    public List<ItemStack> getRedisByPlayerItem0(String playerName) {
        Jedis jedis = JedisUtils.getJedis();
        jedis.select(3);
        String itemsStringJson = jedis.get(playerName + "_0");
        JedisUtils.closeJedis(jedis);
        return jsonToItems(itemsStringJson);
    }

    /**
     * 从读redis取玩家的Item1
     */
    public List<ItemStack> getRedisByPlayerItem1(String playerName) {
        Jedis jedis = JedisUtils.getJedis();
        jedis.select(3);
        String itemsStringJson = jedis.get(playerName + "_1");
        JedisUtils.closeJedis(jedis);
        return jsonToItems(itemsStringJson);
    }

    /**
     * 从redis发放物品
     */
    public void givePlayerItemsByRedis(Player p) {
        //先清空
        //装备栏
        for (ItemStack itemStack : p.getInventory().getArmorContents()) {
            if (itemStack != null) {
                itemStack.setAmount(0);
            }
        }
        //物品栏
        for (ItemStack itemStack : p.getInventory().getExtraContents()) {
            if (itemStack != null) {
                itemStack.setAmount(0);
            }
        }
        //开始发放
        List<ItemStack> itemStackList0 = getRedisByPlayerItem0(p.getName());
        List<ItemStack> itemStackList1 = getRedisByPlayerItem1(p.getName());
        MsgUtils.logServer("读取玩家数据-> " + itemsToJson(itemStackList0));
        MsgUtils.logServer("读取玩家数据-> " + itemsToJson(itemStackList1));
        p.getInventory().setArmorContents(itemStackList0.toArray(new ItemStack[itemStackList0.size()]));
        p.getInventory().setExtraContents(itemStackList1.toArray(new ItemStack[itemStackList1.size()]));
        //发放完成

    }
}
